// 数组：存储有序的数据集合。

// * 使用 at(i) 获取最后一个元素
// i >= 0 时，与 arr[i] 相同。
// i 为负数时，它从末尾向前数。

let arr = [1, 2, 3, 4, 5]
console.log(arr.at(-1)) // 5

// * pop 删除最后一个元素，并返回该元素。
let arr2 = [1, 2, 3, 4, 5]
console.log(arr2.pop()) // 5
console.log(arr2) // [1, 2, 3, 4]

// * push 向数组末尾添加一个或多个元素
let arr3 = [1, 2, 3, 4, 5]
arr3.push(6, 7, 8)
console.log(arr3) // [1, 2, 3, 4, 5, 6, 7, 8]

// * shift 删除数组的第一个元素，并返回该元素
let arr4 = [1, 2, 3, 4, 5]
console.log(arr4.shift()) // 1
console.log(arr4) // [2, 3, 4, 5]

// * unshift 向数组的开头添加一个或多个元素
let arr5 = [1, 2, 3, 4, 5]
arr5.unshift(-1, 0)
console.log(arr5) // [ -1, 0, 1, 2, 3, 4, 5 ]

// 数组是一种特殊的对象。使用方括号来访问属性 arr[0] 实际上是来自于对象的语法。
// 它其实与 obj[key] 相同，其中 arr 是对象，而数字用作键（key）。

// * 关于 length（它实际上不是元素的个数，而是最大索引值加一）
let arr6 = []
arr6[123] = 'abc'
console.log(arr6.length) // 124

// * 清空数组最简单的方法就是：arr.length = 0; 这样清空后，其他引用它的数组也就被清空了。而 arr = [] 这种方式不会把引用清空。

// * new Array()

// 传入值
let arr7 = new Array(1, 2, 3)
console.log(arr7) // [ 1, 2, 3 ]

// 传入单个数字
let arr8 = new Array(5)
console.log(arr8[0]) // undefined
console.log(arr8.length) // 5

// * 数组没有 Symbol.toPrimitive，也没有 valueOf，它们只能执行 toString 进行转换。
// [] => ''
// [1, 2, 3] => '1,2,3'
// [{a:1}, {a:2}] => '[object Object],[object Object]'
// [function () { }] => 'function () { }'

// 对象转字符串 {} => '[object Object]'
